今天我們來繼續函數的部分。
可以使用元組類型讓多個值當一個複合值從函數返回。
讓我們來看一下官方的例子。
func minMax(array: [Int]) -> (min: Int, max: Int) {
var currentMin = array[0]
var currentMax = array[0]
for value in array[1..<array.count] {
if value < currentMin {
currentMin = value
} else if value > currentMax {
currentMax = value
}
}
return (currentMin, currentMax)
}
上面的方法是在一個 array 裡面 找出最大值跟最小值。
上面的做法是用比較大小來找出最大值跟最小值。
但是也可以用 array 裡面自己也可以找到最大最小值。
let array: [Int] = [1,2,3,4,-1]
array.min = -1
array.max = 4
如果返回的類型有可能是沒有值的元組的話,可以用可選的類型來寫。
拿上面的例子來寫的話會像下面這樣
func minMax(array: [Int]) -> (min: Int, max: Int)? {
if array.isEmpty { return nil }
var currentMin = array[0]
var currentMax = array[0]
for value in array[1..<array.count] {
if value < currentMin {
currentMin = value
} else if value > currentMax {
currentMax = value
}
}
return (currentMin, currentMax)
}
上面原本的方法他返回了一個 (min: Int, max: Int)? 的可選值元組。
並在後面寫了 if array.isEmpty { return nil }
來檢測如果陣列裡面為空就返回一個 nil 告訴系統為空。
簡單來說就是,可以把 return 節省起來
像下面的例子
func greeting(for person: String) -> String {
"Hello, " + person + "!"
}
print(greeting(for: "Dave"))
// 打印 "Hello, Dave!"
func anotherGreeting(for person: String) -> String {
return "Hello, " + person + "!"
}
print(anotherGreeting(for: "Dave"))
// 打印 "Hello, Dave!"
每個函數都有一個 參數標籤 跟 參數名稱 。 這樣也方便你使用時的可讀性。
func someFunction(firstParameterName: Int, secondParameterName: Int) {
}
someFunction(firstParameterName: 1, secondParameterName: 2)
參數標籤通常都是寫在標籤前面的,並用空格隔開。
func greet(person: String, from hometown: String) -> String {
return "Hello \(person)! Glad you could visit from \(hometown)."
}
print(greet(person: "Bill", from: "Cupertino"))
// Prints "Hello Bill! Glad you could visit from Cupertino."
參數標籤可以省略,就寫一個 (_) 就可以了。
func someFunction(_ firstParameterName: Int, secondParameterName: Int) {
}
someFunction(1, secondParameterName: 2)
參數在設定時也可以給他一個默認值,如果使用函數時可以不設定默認值那邊的參數就會使用函數裡設定的默認參數值。
func someFunction(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) {
// 如果你在调用时候不传第二个参数,parameterWithDefault 会值为 12 传入到函数体中。
}
someFunction(parameterWithoutDefault: 3, parameterWithDefault: 6) // parameterWithDefault = 6
someFunction(parameterWithoutDefault: 4) // parameterWithDefault = 12
可變的參數可以接受 0個 或多個值。通常會在設定的時候加入 ... 來表示可變參數。
func arithmeticMean(_ numbers: Double...) -> Double {
var total: Double = 0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
arithmeticMean(1, 2, 3, 4, 5)
// 返回 3.0, 是这 5 个数的平均数。
arithmeticMean(3, 8.25, 18.75)
// 返回 10.0, 是这 3 个数的平均数。
今天就先到這裡,明天再來繼續我們的函數,這篇真的超長的。